本教程将通过项目体系结构,从头开始设置,最后我们将编写一些单元测试。
而本系列的第1部分,我们介绍了什么是自动化测试的重要性,什么是测试金字塔,什么是测试类型,可以使用什么工具在Android中执行TDD以及测试文件夹的位置。
项目架构
根据自动化测试,我们必须遵循某种架构模式,这将有助于我们以清晰,可测试的方式测试和构建应用程序。
有许多架构模式可轻松支持TDD Model - View - Presenter(MVP),Model - View - Viewmodel(MVVM)。
我们正在为我们的教程系列选择MVP。
- Model通常是由Presenter和View用来传达信息或采取行动的POJO。
- View(Activity或Fragment)是显示数据的被动界面。这是我们设置数据并进行UI相关更改(如隐藏,移动视图)的地方。
- Presenter决定演示逻辑,我们的业务逻辑驻留在这里。 它与存储库交谈获取数据,并将其格式化以显示在视图中。 它决定在View.Try上显示什么,尽量避免在演示者中使用Android特定的代码(我知道有时更难)。
项目设置
在这篇文章中,我们将从头开始创建简单的Android应用程序。 我们将创建的应用程序是简单的应用程序,登录并采取学生出席。
打开Android Studio选择“Start a new Android Project”
输入应用程序名称为“StudentAttendance”,公司域名为“nilesh.tdd.com”。 点击下一步
选择你想要支持的Android版本并点击“Next”
选择“Empty Activity”并点击“Next”
输入活动名称,然后单击“Finish”
最终的项目结构将如下图所示
单元测试
在对包结构进行一些重构之后,签出提交(81d1668667bcb5eacf4cf94a8dffe738ad206d67)
使用下面的命令
1 | git clone https://github.com/NileshJarad/TDD_Demo.git |
如果有人在结帐后出现错误
然后在build.gradle中将build.gradle版本更改为2.1.2
所以最后我们在这里编程了。
现在我们将编写我们的第一个测试用例来检查“如果用户在三次尝试后尝试登录,我们会向他/她显示错误消息”
转到com.tdd.nilesh.studentattendance.login.LoginPresenter类。 在类名上使用光标,按SHIFT + CTRL + T(对于mac SHIFT + CMD + T),这将弹出带有Create New Test选项的窗口。
它将自动为Test选择类名,并在我们的例子LoginPresenterTest的类名末尾追加Test。
点击确定。 它会再次弹出窗口的测试文件夹。 在我们编写JUnit时,请选择../app/src/test/…它将创建具有相同包结构的测试类。
我正在发布代码的快照,因为我希望您编写代码。😊
现在我们将写下如下屏幕截图中的测试。
@Test注释表明它是测试。 由于incrementLoginAttempt&isLoginAttemptExceeded以红色显示。 我们必须在LoginPresenter中创建方法。 按ALT + ENTER,将在演示者类中创建方法,如下所示。
我们写了失败的测试。 逐渐我们会为它编写它的实现。 要运行测试,请按测试名称左侧的小绿色播放图像。
由于我们编写的测试失败测试输出应如下所示。
我们期待1作为输出,但我们得到0。
现在我们将编写通过测试的测试实现。 以下是通过测试的实施。
再次运行测试它应该传递😍。
直到现在,使用以下结帐命令进行回购。
1 | git checkout 302962ea6f63aa3afba003efa043ebacbaf02345 |
现在您必须编写checkIfLoginAttemptIsNotExceeded测试,并检查您的实现是否正确。 如果你不是,不要担心它会在下一次提交。
现在我们要检查“用户名和密码是否正确”
所以我们会写测试,下面是它的样子(失败测试😉)
再次重复ALT + ENTER和运行测试的过程。 由于测试失败,它会显示红色警报失败。
现在我们将编写它的实现如下。
再次运行测试它现在会通过。
现在尝试使用checkUsernameAndPasswordIsInCorrect测试用例。
直到现在,使用以下结帐命令进行回购。
1 | git checkout 4771fbfb8c6cbda98d9f01ac5e035ea02f0f5da6 |
同时,希望听到有关这方面的建议和意见。
Cheers 🍻 !!!.